C++アウトラインでclass x final:base{}と:がfinalにくっついているとクラス名がfinalになる不具合の修正 #1612
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR の目的
C++アウトラインで、class名がfinalになってしまう不具合を修正します。
カテゴリ
PR の背景
PR のメリット
アウトライン解析が若干正確になります。
PR のデメリット (トレードオフとかあれば)
特にありません。
仕様・動作説明
C++アウトライン解析では、クラス名がMY_MACROではなく class_nameになるように後ろの単語が優先されるようです。
その際にfinalキーワードは無視されるようになっています。
しかしサクラエディタの実装では単語単位の解析に:を含んでいてfinalの直後にある:がスペースを挟んでいるかで、実行されるコードが異なります。
そこで、スペース側ではfinalの考慮がされていましたが、くっついている側の処理では抜けていました。
なお無名クラスかのチェックがあり、言語が日本語の時、クラス名が漢字で
無名
だと、無名クラスと認識されてfinalがクラス名にされてしまう制限があります。本当の無名クラスをfinal指定することは、言語仕様上できません。
PR の影響範囲
C++アウトライン解析の該当部分のみです。
テスト内容
テスト1
手順
このソースコードをサクラエディタに貼り付けて、C++のアウトライン解析を実行します。
PRの修正前は「c2, c4, c7, c9」のクラス名がfinalになってしまっています。
PRの修正適用後は正しく表示されるようになります。
関連 issue, PR
参考資料